﻿Public Class PersonelSosyalSigorta
	Inherits ProcessReport

	Dim Rsi As Recordset

	Public Overrides Sub GenericEvent(ByVal e As ProcessEventArgs)
		Select Case e.EventType
			Case EventType.Initialize
				Text = "Sosyal Sigorta Dökümleri"
				InitialHelp = "Maaş ödeme dönemini girin."
				AddCombo("donem", "Dönem", Personel.MaasDonemleriPersonelSource, "nl", "--first--", "Maaş ödeme dönemini seçmeniz gerekir.")
			Case EventType.ValidateForm
				Rs = Personel.SosyalSigortaKesintileri(Remote, Mid(Input("donem"), 1, 4), Mid(Input("donem"), 5, 2))
				Rs.AddFields("donem(s),anapara(m),ceza(m),toplam(m)")
				Do Until Rs.EOF
					Rs("donem") = Mid(Input("donem"), 1, 4) & "/" & Mid(Input("donem"), 5, 2)
					Dim Oran As Decimal = Prim.Oran(Rs("donem") & "/01", Rs("bordro"), 1)
					Rs("anapara") = Rs("pek") * Oran / 100
					Dim GecikmeZammi As Decimal = Prim.GecikmeZammiHesabi(Rs("bordro"), Rs("donem") & "/01", Today)
					Rs("ceza") = Rs("anapara") * GecikmeZammi / 100
					Rs("toplam") = Rs("anapara") + Rs("ceza")
					Rs.MoveNext()
				Loop
				Rs.MoveFirst()
				Rs.Superset = Rs.GroupBy("sube,donem,bordro,count(*),sum(pogs),sum(pek),sum(anapara),sum(ceza)")
				e.Result = True
			Case EventType.ReportHeader
				Report.NoPageNumbers = True
				Report.PrintLogo()
				Report.SetColumns("", "1", "c", "")
				Report.Print("<b>SOSYAL SİGORTALAR DAİRESİ")
				Report.Print("<b>AYLIK SİGORTA PRİMLERİ BORDROSU")
				Report.SkipLine()
				'Başlık
				Rsi = Isyeri.IsyeriNoAra(Remote, Choose(Rs.Superset("sube"), "100002", "200001", "300201", "", "500173", "", "100001"))
				Report.BeginBorders()
				Report.SetColumns("", "2;3;2;7", "r;l;r;l", "-").Print("Sicil Numarası", Rsi("sicilno"), "Ünvanı", Rsi("isyeriadi"))
				Report.SetColumns("", "1;4;1;1", "r;l;r;l", "-").Print("İşyeri Adresi", "", "Telefon", "")
				Report.EndBorders().SkipLine()
				'Bordro Bilgileri
				Report.BeginBorders()
				Report.Indent = New Padding(6)
				Report.SetColumns("", "2;3;2;2;2;2;1", "c;c;c;c;c;c;c", "--")
				Report.Print("Ait Olduğu Ay", Upper(MonthName(Mid(Rs.Superset("donem"), 6))) & " " & Mid(Rs.Superset("donem"), 1, 4), "Bordro Türü", "Asıl", "T.S./P.O." & Trim(Rsi("tehlike")) & "/" & Trim(Rsi("tehlike") / 2), "Bordro Tipi", Rs.Superset("bordro"))
				Report.Indent = New Padding(2)
				'Tutarlar
				Report.SetColumns("", "2;1;1;1;2;1;2;1;2", "m;c;c;c;m;c;m;c;m", "----")
				Report.Print("<c><rs=2>PRİME ESAS AYLIK BRÜT KAZANÇLARI TOPLAMI", "<c><rs=2>Sigortalı Sayısı", "<c><rs=2>Toplam PÖGS", "<c><cs=2>SİGORTALI HİSSESİ", "<c><cs=2>İŞVEREN HİSSESİ", "<c><cs=2>TOPLAM")
				Report.Print("<c>Prim Oranı", "<r>Prim Tutarı (TL)", "<c>Prim Oranı", "<r>Prim Tutarı (TL)", "<c>Prim Oranı", "<r>Prim Tutarı (TL)")
				Dim Pek As Decimal = Rs.Superset("sumpek")
				Dim Oran1 As Double = Prim.OranSigortali(Rs.Superset("donem") & "/01", Rs.Superset("bordro"))
				Dim Oran2 As Double = Prim.OranIsveren(Rs.Superset("donem") & "/01", Rs.Superset("bordro"), Rsi("tehlike"))
				Report.Print(Pek, Rs.Superset("count"), Rs.Superset("sumpogs"), Oran1, Pek * Oran1 / 100, Oran2, Pek * Oran2 / 100, Oran1 + Oran2, Pek * (Oran1 + Oran2) / 100)
				Report.SetBoundaries(9 / 13, 0)
				Report.SetColumns("", "2;2", "c;m", "----").Print("GECİKME ZAMMI", Rs.Superset("sumceza")).Print("TOPLAM", Rs.Superset("sumanapara") + Rs.Superset("sumceza"))
				Report.ResetBoundaries.EndBorders.SkipLine()
				'İmza yeri
				Report.SetColumns("", "1", "c", "----").Print("<b>Bu bordroda yazılı ve elektronik ortamda kayıtlı bilgilerin doğruluğunu ve bundan sorumluluğumu beyan ederim.").SkipLine(3)
				Report.SetColumns("", "2;7;3", "c;c;c", "----").Print("TARİH", "", "<w>İŞVERENİN/İŞSAHİBİNİN VEYA VEKİLİN İMZASI VE VARSA MÜHÜRÜ").SkipLine()
				'Açıklama
				Report.SetColumns("", "1", "c", "--").Print("<b>AÇIKLAMA")
				Report.SetColumns("", "1;70", "c;l", "----")
				Report.Indent = New Padding(0)
				Report.Print("1.  ", "<w>Bu bordro, iki nüsha olarak düzenlenir ve ödenmesi gereken primlerle birlikte bağlı bulunulan ŞUBE veya BÜRO'ya verilir.")
				Report.Print("2.  ", "<w>Bu bordro, ait olduğu ayı takip eden ayın sonuna kadarki süre içinde verilir. Süresi içinde verilmemesi halinde, Sosyal Sigortalar Yasası'nın 90. maddesinde öngörülen gecikme zammı ve faiz uygulanır.")
				Report.Print("3.  ", "<w>Bordroya kaydedilecek sigortalıların SİGORTA NUMARALARI'nın en küçüğünden büyüğüne doğru sıralı yazılması gerekmektedir.")
				Report.Print("4.  ", "<w>Çalıştırmakta olduğunuz sigortalılar arasında, Sosyal Sigortalar Dairesi'nden YAŞLILIK ÖDENEĞİ veya YAŞLILIK AYLIĞI almakta olanlar varsa, bu bordro üzerinde gösterilmeyip bunlar için ayrı bordro tanzim edilmesi gerekmektedir,")
				Report.Indent = New Padding(2)
				Report.SkipLine()
				Report.SetColumns("", "1", "c", "").Print("<b>SİGORTALILARIN AYLIK PRİM DÖKÜMÜ")
			Case EventType.PageHeader
				Report.BeginBorders()
				Report.SetColumns("Sıra;Sigortalı No.;Kimlik No.;Adı;Soyadı;PEK (YTL);PÖGS;E/K;Pasaport No.;Düşünceler", "1;3;3;5;5;3;2;1;2;2", "c;c;c;l;l;m;r;c;c;c", "--")
			Case EventType.ReportDetail
				Dim i As Integer = 1
				Rs.CreateSubset("sube=" & Rs.Superset("sube") & " and donem='" & Rs.Superset("donem") & "' and bordro='" & Rs.Superset("bordro") & "'")
				Do Until Rs.Subset.EOF
					Dim Kisi As Recordset = Sigortali.SnoAra(Remote, Rs.Subset("sno"))
					If Not Kisi.EOF Then
						Report.Print(i, Rs.Subset("sno"), Rs.Subset("kimlik"), Kisi("adi"), Kisi("soyadi"), Rs.Subset("pek"), Rs.Subset("pogs"), Kisi("cins"), "", "")
					End If
					i += 1
					Rs.Subset.MoveNext()
				Loop
				Report.EndBorders.EndPage()
				Rs.Superset.MoveNext()
				e.Result = Not Rs.Superset.EOF
		End Select
	End Sub

End Class
